<template>
  <div class="login">
    <!-- el-form
    1:用el-form包住所有表单元素
    2：用el-form-item包住单个项的表单元素   label:设置当前的标题
    3：el-form   label-width:设置标题宽度
     -->
    <!-- 表单验证
     基本表单验证
     1：el-form
          model:整个表单的对象
          rules:验证规则
     2：el-form-item
         prop:需要验证项的字段名
      rules：{
        prop的值:[
         {required:true,message:'错误信息',trigger:'blur/change'},
         {min:最小长度,max:最大长度,message:'错误信息',trigger:'blur/change'}
        ]

      }

    自定义表单验证

       rules：{
          prop的值：[
          {validator:(rule,value,callback)=>{
              rule:当前的规则
              value：当前项的值
              callback：
                 验证通过：  callback()
                 验证不通过  callback(new Error('错误信息'))
          },trigger:'blur/change'}
          ]

       }
    全局表单验证
       1：el-form  ref='form'
       2:this.$refs.form.validate((result)=>{
         result:true:验证通过   false:验证失败
       })

      message基本使用
      完整写法
      this.$message({
        type:'success',   type:'info'  默认   成功：success   警告：warning   错误:error
        message:'消息内容'
      })
      简写
       this.$message.success('消息内容')
       this.$message.warning('消息内容')
       this.$message.error('消息内容')

       登陆：
       1：定义api
       2:导入在表单验证通过后调用
       3：调用成功
           提示
           存储token
           跳转到首页

      -->
    <div v-loading="loading" class="box">
      <!-- <HmForm ref="hmForm" @click="HmFormClick" /> -->
      <el-form ref="form" :model="form" :rules="rules">
        <!-- <el-form-item> -->
        <div style="text-align: center; margin-bottom: 30px">
          <img src="@/assets/common/login-logo.png" alt="">
        </div>
        <!-- </el-form-item> -->
        <el-form-item prop="mobile">
          <el-input
            v-model="form.mobile"
            placeholder="请输入手机号"
            prefix-icon="el-icon-user-solid"
            @keyup.enter.native="submit"
          />
        </el-form-item>
        <el-form-item prop="password">
          <el-input
            v-model="form.password"
            placeholder="请输入密码"
            show-password
            prefix-icon="el-icon-unlock"
            @keyup.enter.native="submit"
          />
          <!-- 让组件标签使用原生的事件  .native -->
        </el-form-item>
        <el-button class="login-btn" @click="submit">
          <span class="txt">登录</span>
        </el-button>
        <!-- <el-button class="login-btn" @click="reset">
          <span class="txt">重置</span>
        </el-button> -->
      </el-form>
    </div>
  </div>
</template>
<script>
// import HmForm from './components/HmForm.vue'
// 登陆接口调用与token存储都在vuex进行
// import { sysLogin } from '@/api/login'
export default {
  components: {
    // HmForm
  },
  data() {
    return {
      loading: false,
      form: {
        mobile: '13800000002', //	string	必须		手机号
        password: '123456' //	string	必须		密码
      },
      rules: {
        mobile: [
          { required: true, message: '请输入手机号', trigger: 'change' },
          {
            validator: (rule, value, callback) => {
              // console.log(rule)
              // console.log(value)
              const reg =
                /^(0|86|17951)?(13[0-9]|15[012356789]|166|17[3678]|18[0-9]|14[57])[0-9]{8}$/
              if (reg.test(value)) {
                // 验证通过
                callback()
              } else {
                callback(new Error('请正确输入手机号'))
              }
            },
            trigger: 'change'
          }
        ], //	string	必须		手机号
        password: [
          { required: true, message: '请输入密码', trigger: 'change' },
          {
            min: 6,
            max: 12,
            message: '请输入6-12位密码',
            trigger: 'change'
          }
        ] //	string	必须		密码
      }
    }
  },
  methods: {
    HmFormClick() {
      console.log('HmFormClick')
    },
    submit() {
      // console.log(this.$refs.hmForm.num)
      // this.$refs.hmForm.validate()
      this.$refs.form.validate(async(result) => {
        // result:true验证通过，false:验证失败
        // console.log(result)
        if (result) {
          // const res = await sysLogin(this.form)
          // 调用vuex中的actions实现登陆接口调用
          // console.log(1)
          // 显示loading   1:用户体验  2：避免多次点击调用接口
          this.loading = true
          // try{可能出错的代码}catch(error){error:错误信息}
          try {
            await this.$store.dispatch('user/toLogin', this.form)
            // .then(() => {
            this.$message.success('登录成功')
            // const redirect = this.$route.query.redirect
            // if (redirect) {
            //   this.$router.push(redirect)
            // } else {
            //   this.$router.push('/')
            // }
            this.$router.push(this.$route.query.redirect || '/')
            // console.log(2)
          } catch {
            this.loading = false
          }

          // })
        } else {
          this.$message.error('验证失败')
        }
      })
    },
    reset() {
      this.$refs.form.resetFields()
    }
  }
}
</script>
<style lang="scss" scoped>
.login {
  height: 100%;
  background: url('~@/assets/common/login.jpg') no-repeat;
  display: flex;
  justify-content: center;
  align-items: center;
  .box {
    width: 450px;
  }
  &-btn {
    width: 100%;
    background-color: #407ffe;
    border-color: #407ffe;
    color: #fff;
    .txt {
      font-size: 20px;
    }
  }
}
// /deep/  >>> ::v-deep
::v-deep .el-form-item__error {
  color: #fff;
}
</style>
